package com.dts.common.utils;

import com.dts.common.exception.ServiceException;
import java.math.BigDecimal;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.List;
import java.util.Objects;

import org.apache.commons.collections4.CollectionUtils;



/**
 *
 * @Description 校验字段工具类
 * @author liguangyao
 * @date 2022年5月10日 上午10:13:05
 */
public class CheckFieldUtil
{
    /**
     *
     * @Description: 校验字符串不能为空
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(String fieldValue, String errorCode) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (StringUtils.isBlank(fieldValue))
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验对象不能为空
     * @param fieldValue
     *            对象
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(Object fieldValue, String errorCode) throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验集合不能为空
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(List<?> fieldValue, String errorCode) throws ServiceException
    {
        if (CollectionUtils.isEmpty(fieldValue))
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验字符串是否非法
     * @param fieldValue
     *            字段值
     * @param regexp
     *            正则表达式
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkStrRegexp(String fieldValue, String regexp, boolean isEmpty,
                                      String errorCode) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, errorCode);

        if (StringUtils.isNoneBlank(regexp))
        {
            if (!fieldValue.matches(regexp))
            {
                throw new ServiceException(errorCode);
            }
        }
    }

    /**
     *
     * @Description: 校验字符串长度
     * @param fieldValue
     *            字段值
     * @param minLen
     *            最小长度
     * @param maxLen
     *            最大长度
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkStrLength(String fieldValue, int minLen, int maxLen, boolean isEmpty,
                                      String errorCode) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, errorCode);

        int fieldLength = null == fieldValue ? 0 : fieldValue.length();
        if (fieldLength < minLen || fieldLength > maxLen)
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验数字在范围内
     * @param fieldValue
     *            字段值
     * @param minValue
     *            最小值
     * @param maxValue
     *            最大值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNumRange(int fieldValue, int minValue, int maxValue, String errorCode)
            throws ServiceException
    {
        if (fieldValue < minValue || fieldValue > maxValue)
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验数字大小
     * @param fieldValue
     *            字段值
     * @param compareValue
     *            比较值
     * @param type
     *            1:大于 2：等于 3：小于
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNum(long fieldValue, long compareValue, int type, String errorCode)
            throws ServiceException
    {
        if (1 == type)
        {
            if (fieldValue > compareValue)
            {
                throw new ServiceException(errorCode);
            }
        }
        else if (2 == type)
        {
            if (fieldValue == compareValue)
            {
                throw new ServiceException(errorCode);
            }
        }
        else if (3 == type)
        {
            if (fieldValue < compareValue)
            {
                throw new ServiceException(errorCode);
            }
        }
    }

    /**
     *
     * @Description 校验数字是大于1的正整数
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNum(Integer fieldValue, String errorCode) throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(errorCode);
        }

        if (fieldValue < 1)
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验是long类型
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
//    public static void checkLong(Object fieldValue, String errorCode) throws ServiceException
//    {
//        checkIsNotEmpty(fieldValue, errorCode);
//
//        try
//        {
//            Long.valueOf(String.valueOf(fieldValue));
//        }
//        catch (Exception e)
//        {
//            throw new ServiceException(errorCode);
//        }
//    }

    /**
     *
     * @Description 校验时间格式
     * @param fieldValue
     *            字段值
     * @param pattern
     *            时间格式
     * @param isEmpty
     *            是否可以为空
     * @param isOverCurTime
     *            是否可以超过当前时间
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkTimeFormat(String fieldValue, String pattern, boolean isEmpty, boolean isOverCurTime, String errorCode) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        Date date = null;
        Date curDate = null;
        try
        {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            format.setLenient(false);
            date = format.parse(fieldValue);

            String s = format.format(new Date());
            curDate = format.parse(s);
        }
        catch (Exception e)
        {
            throw new ServiceException(errorCode);
        }

        if (isOverCurTime && date.before(curDate))
        {
            throw new ServiceException(errorCode);
        }
    }

    /**
     *
     * @Description: 校验字符串不能为空
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(String fieldValue, String errorCode, Integer errorMsg)
            throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (StringUtils.isBlank(fieldValue))
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验对象不能为空
     * @param fieldValue
     *            对象
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(Object fieldValue, String errorCode, Integer errorMsg)
            throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验集合不能为空
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkIsNotEmpty(List<?> fieldValue, String errorCode, Integer errorMsg)
            throws ServiceException
    {
        if (CollectionUtils.isEmpty(fieldValue))
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验字符串是否非法
     * @param fieldValue
     *            字段值
     * @param regexp
     *            正则表达式
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkStrRegexp(String fieldValue, String regexp, boolean isEmpty,
                                      String errorCode,Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, errorCode, errorMsg);

        if (StringUtils.isNoneBlank(regexp))
        {
            if (!fieldValue.matches(regexp))
            {
                throw new ServiceException(errorCode, errorMsg);
            }
        }
    }

    /**
     *
     * @Description: 校验字符串长度
     * @param fieldValue
     *            字段值
     * @param minLen
     *            最小长度
     * @param maxLen
     *            最大长度
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkStrLength(String fieldValue, int minLen, int maxLen, boolean isEmpty,
                                      String errorCode,Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, errorCode, errorMsg);

        int fieldLength = null == fieldValue ? 0 : fieldValue.length();
        if (fieldLength < minLen || fieldLength > maxLen)
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验数字在范围内
     * @param fieldValue
     *            字段值
     * @param minValue
     *            最小值
     * @param maxValue
     *            最大值
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNumRange(int fieldValue, int minValue, int maxValue, String errorCode,
                                     Integer errorMsg) throws ServiceException
    {
        if (fieldValue < minValue || fieldValue > maxValue)
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验数字大小
     * @param fieldValue
     *            字段值
     * @param compareValue
     *            比较值
     * @param type
     *            1:大于 2：等于 3：小于
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNum(long fieldValue, long compareValue, int type, String errorCode,
                                Integer errorMsg) throws ServiceException
    {
        if (1 == type)
        {
            if (fieldValue > compareValue)
            {
                throw new ServiceException(errorCode, errorMsg);
            }
        }
        else if (2 == type)
        {
            if (fieldValue == compareValue)
            {
                throw new ServiceException(errorCode, errorMsg);
            }
        }
        else if (3 == type)
        {
            if (fieldValue < compareValue)
            {
                throw new ServiceException(errorCode, errorMsg);
            }
        }
    }

    /**
     *
     * @Description 校验数字是大于1的正整数
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @param errorMsg
     *            错误描述
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkNum(Integer fieldValue, String errorCode, Integer errorMsg)
            throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(errorCode, errorMsg);
        }

        if (fieldValue < 1)
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验是long类型
     * @param fieldValue
     *            字段值
     * @param errorCode
     *            错误码
     * @throws ServiceException
     *             异常
     * @param errorMsg
     *            错误描述
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkLong(Object fieldValue, String errorCode, Integer errorMsg)
            throws ServiceException
    {
        checkIsNotEmpty(fieldValue, errorCode, errorMsg);

        try
        {
            Long.valueOf(String.valueOf(fieldValue));
        }
        catch (Exception e)
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }

    /**
     *
     * @Description 校验时间格式
     * @param fieldValue
     *            字段值
     * @param pattern
     *            时间格式
     * @param isEmpty
     *            是否可以为空
     * @param isOverCurTime
     *            是否可以超过当前时间
     * @param errorCode
     *            错误码
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void checkTimeFormat(String fieldValue, String pattern, boolean isEmpty,
                                       boolean isOverCurTime, String errorCode, Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        Date date = null;
        Date curDate = null;
        try
        {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            format.setLenient(false);
            date = format.parse(fieldValue);

            String s = format.format(new Date());
            curDate = format.parse(s);
        }
        catch (Exception e)
        {
            throw new ServiceException(errorCode, errorMsg);
        }

        if (isOverCurTime && date.before(curDate))
        {
            throw new ServiceException(errorCode, errorMsg);
        }
    }


    /**
     * 业务通用错误码
     */
    private static final String SERVICE_FAIL_OTHER = "service.fail.other";

    /**
     *
     * @Description: 校验字符串不能为空
     * @param fieldValue
     *            字段值
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void isNotEmpty(String fieldValue, Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (StringUtils.isBlank(fieldValue))
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验对象不能为空
     * @param fieldValue
     *            对象
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void isNotEmpty(Object fieldValue, Integer errorMsg) throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验集合不能为空
     * @param fieldValue
     *            字段值
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void isNotEmpty(List<?> fieldValue, Integer errorMsg) throws ServiceException
    {
        if (CollectionUtils.isEmpty(fieldValue))
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验字符串是否非法
     * @param fieldValue
     *            字段值
     * @param regexp
     *            正则表达式
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void strRegexp(String fieldValue, String regexp, boolean isEmpty, Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, SERVICE_FAIL_OTHER, errorMsg);

        if (StringUtils.isNoneBlank(regexp))
        {
            if (!fieldValue.matches(regexp))
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
    }

    /**
     *
     * @Description: 校验字符串长度
     * @param fieldValue
     *            字段值
     * @param minLen
     *            最小长度
     * @param maxLen
     *            最大长度
     * @param isEmpty
     *            是否可以为空, true：是 false：否
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void strLength(String fieldValue, int minLen, int maxLen, boolean isEmpty, Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        checkIsNotEmpty(fieldValue, SERVICE_FAIL_OTHER, errorMsg);

        int fieldLength = null == fieldValue ? 0 : fieldValue.length();
        if (fieldLength < minLen || fieldLength > maxLen)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验数字在范围内
     * @param fieldValue
     *            字段值
     * @param minValue
     *            最小值
     * @param maxValue
     *            最大值
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void numRange(int fieldValue, int minValue, int maxValue, Integer errorMsg) throws ServiceException
    {
        if (fieldValue < minValue || fieldValue > maxValue)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验数字大小
     * @param fieldValue
     *            字段值
     * @param compareValue
     *            比较值
     * @param type
     *            1:大于 2：等于 3：小于
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void num(long fieldValue, long compareValue, int type, Integer errorMsg) throws ServiceException
    {
        if (1 == type)
        {
            if (fieldValue > compareValue)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
        else if (2 == type)
        {
            if (fieldValue == compareValue)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
        else if (3 == type)
        {
            if (fieldValue < compareValue)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
    }

    /**
     *
     * @Description 校验数字是大于1的正整数
     * @param fieldValue
     *            字段值
     * @throws ServiceException
     *             异常
     * @param errorMsg
     *            错误描述
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void num(Integer fieldValue, Integer errorMsg) throws ServiceException
    {
        if (null == fieldValue)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }

        if (fieldValue < 1)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description: 校验是long类型
     * @param fieldValue
     *            字段值
     * @throws ServiceException
     *             异常
     * @param errorMsg
     *            错误描述
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void Long(Object fieldValue, Integer errorMsg) throws ServiceException
    {
        checkIsNotEmpty(fieldValue, SERVICE_FAIL_OTHER, errorMsg);

        try
        {
            Long.valueOf(String.valueOf(fieldValue));
        }
        catch (Exception e)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description 校验时间格式
     * @param fieldValue
     *            字段值
     * @param pattern
     *            时间格式
     * @param isEmpty
     *            是否可以为空
     * @param isOverCurTime
     *            是否可以超过当前时间
     * @param errorMsg
     *            错误描述
     * @throws ServiceException
     *             异常
     * @author liguangyao
     * @date 2022年5月10日 上午10:13:05
     */
    public static void timeFormat(String fieldValue, String pattern, boolean isEmpty, boolean isOverCurTime, Integer errorMsg) throws ServiceException
    {
        fieldValue = StringUtils.getValue(fieldValue);
        if (isEmpty && StringUtils.isBlank(fieldValue))
        {
            return;
        }

        Date date = null;
        Date curDate = null;
        try
        {
            SimpleDateFormat format = new SimpleDateFormat(pattern);
            format.setLenient(false);
            date = format.parse(fieldValue);

            String s = format.format(new Date());
            curDate = format.parse(s);
        }
        catch (Exception e)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }

        if (isOverCurTime && date.before(curDate))
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

    /**
     *
     * @Description 校验数字大小
     * @param fieldValue
     * @param compareValue
     * @param type 1:大于 2：等于 3：小于
     * @param isEmpty
     * @param errorMsg
     * @throws ServiceException
     * @author Myl
     * @date 2023年08月04日 16:48
     */
    public static void num(BigDecimal fieldValue, BigDecimal compareValue, int type, boolean isEmpty, Integer errorMsg) throws ServiceException
    {
        if (isEmpty && Objects.isNull(fieldValue))
        {
            return;
        }

        if (Objects.isNull(fieldValue))
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }

        if (1 == type)
        {
            if (fieldValue.compareTo(compareValue) > 0)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
        else if (2 == type)
        {
            if (fieldValue.compareTo(compareValue) == 0)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
        else if (3 == type)
        {
            if (fieldValue.compareTo(compareValue) < 0)
            {
                throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
            }
        }
    }

    /**
     *
     * @Description 小数位判断
     * @param fieldValue
     * @param scale 小数位
     * @param isEmpty
     * @param errorMsg
     * @throws ServiceException
     * @author Myl
     * @date 2023年08月04日 16:54
     */
    public static void numScale(BigDecimal fieldValue, int scale, boolean isEmpty, Integer errorMsg) throws ServiceException
    {
        if (isEmpty && Objects.isNull(fieldValue))
        {
            return;
        }

        if (Objects.isNull(fieldValue))
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }

        if (fieldValue.scale() > scale)
        {
            throw new ServiceException(SERVICE_FAIL_OTHER, errorMsg);
        }
    }

}
